草庐IT

C++ make_shared 不可用

全部标签

c++ - boost::interprocess::shared_ptr 是线程安全的(和进程间安全的)吗?

我想在线程之间共享数据,并在最后一个用户完成后自动删除它。这似乎在大多数情况下都有效,在boost::fixed_managed_shared_memory段中使用boost::interprocess::shared_ptr:但并非总是如此。那么,boost::interprocess::shared_ptr线程(和进程间)是否安全?如果我在固定地址使用我的共享内存(我很确定这在我的64位(好吧,48位)地址空间中是没问题的),是否可以使用一个普通的boost::shared_ptr(它是线程安全的)?一些说明:我使用的指针类型是普通的void*,(我的共享内存映射到一个固定地址)。

c++ - 带有 std::shared_ptr 的 QVariant

我有以下问题,我正在使用Q_DECLARE_METATYPE(std::shared_ptr);qRegisterMetaType>();QMetaType::registerComparators>();使用std::shared_ptr与例如QList模型。我需要一种行为QVariant::fromValue(std::shared_ptr(newint(5)))==QVariant::fromValue(std::shared_ptr(newint(5)))是真的。自std::shared_ptr::operator==()以来,我上面的代码在这里返回false比较原始指针。是否

c++ - 派生类与基类的 std::shared_ptr 的使用

下面的方法好不好?classTA{};classTB:TA{};std::shared_ptrspta;spta.reset(newTB); 最佳答案 显示的代码有一个问题,TB必须公开继承自TA.你有一个shared_ptr,所以你想要存储在其中的指针必须可以转换为TA,但带有private继承,基础不可访问,因此您的代码将无法编译。classTA{};classTB:publicTA{};除此之外,代码没有错误并且运行良好。通常,通过基类指针对派生类实例进行多态删除时,需要基类的析构函数为virtual。所以派生类析构函数被调用

c++ - 如何删除 shared_ptr 内容并用新对象替换它?

我想知道是否有一种方法可以删除shared_ptr持有的对象并创建一个新对象,以便该shared_ptr的所有其他拷贝仍然有效并指向该对象? 最佳答案 你只需reassign或reset例子:#include#includetemplatestd::shared_ptrfunc(std::shared_ptrm){m=std::make_shared(T{});//m.reset();//m.reset(newint(56));returnm;}intmain(){std::shared_ptrsp1=std::make_share

c++ - clang:自定义属性在 AST 中不可见

我按照官方手册中的描述在clang中实现了一个自定义属性:http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute所以我在Attr.td中添加了以下代码:defMyAttr:InheritableAttr{letSpellings=[GNU,CXX11,GCC,Declspec];letSubjects=SubjectList;letDocumentation=[MyAttrDocs];}以及AttrDocs.td的文档。重建clang后,它显然知道该属性,因为我在使用它时没有收到未知属性警告。我什至

c++ - clang 3.8 make 文件失败

挠了挠脑袋3个多小时后,我终于放弃了,决定向你们求助。我有几个文件,它们将编译成一个可执行文件。使用-stdlib=libc++flag,我会得到/usr/include/c++/v1/string:1938:44:error:'basic_string'ismissingexceptionspecification'noexcept(is_nothrow_copy_constructible::value)'basic_string::basic_string(constallocator_type&__a)^/usr/include/c++/v1/string:1326:40:no

c++ - 有没有办法拥有一个公共(public)成员,从类外部不可修改,没有访问器包装函数?

据我所知,这似乎不可能以直接的方式进行。使成员const使它对每个人都是const。我想要一个只读属性,但想避免使用典型的“getter”。我想要constpublic,mutableprivate。这在C++中完全可行吗?目前我能想到的只是一些模板和friend的诡计。我现在正在调查这个。这似乎是一个愚蠢的问题,但我之前对这里的答案感到惊讶。 最佳答案 一个可能的解决方案可以基于一个内部类,外部类是它的友元,如下所示:structS{templateclassProp{friendstructS;Tt;voidoperator=(

c++ - 将 STL 算法与 shared_ptr、函数对象一起使用

我有一组shared_ptr,我想将remove_copy_if与谓词的自定义函数对象一起使用。我不知道“最好”的方法。现在,我已经开始工作了:classCellInCol:publicstd::unary_function,bool>{public:CellInCol(size_tcol):_col(col){}booloperator()(conststd::shared_ptr&a)const{return(a->GetX()==_col);}private:size_t_col;};typedefstd::set,CellSorter>Container;Container_g

c++ - shared_ptr 的容器,但使用原始指针进行迭代

我有一个类包含一个列表,其中包含指向另一个类对象的boost::shared_ptrs。允许访问列表中的元素的类成员函数返回原始指针。为了保持一致性,我还希望能够使用原始指针而不是shared_ptrs进行迭代。因此,当我取消引用列表迭代器时,我想获得原始指针,而不是shared_ptr。我假设我需要为此编写一个自定义迭代器。这个对吗?如果可以,有人可以指出我正确的方向——我以前从未这样做过。 最佳答案 这是一个使用Boosttransform_iterator的选项:#include#include#include#include

c++ - 为什么 shared_ptr 可以访问 ingoring "protected access right"

我用shared_ptr做了一些测试,我想不出下面的问题。我刚开始学习boost库。有谁能告诉我原因吗?#include#includeclassA{public:virtualvoidsing(){std::coutpa(newB());pa->sing();deletestatic_cast(pa.get());deletepa.get();//thislinehasaproblemerrorC2248:“A::~A”:can'taccessprotectedmemmber(declaredinclass“A")return0;}intmain(){foo();return0;}但